package cn.syncrond.tcm.core.definition;

import java.io.Serializable;
import java.util.concurrent.Callable;

import cn.syncrond.tcm.core.ext.ITaskEventListener;
import cn.syncrond.tcm.core.ext.IVisitable;
import cn.syncrond.tcm.core.pool.IPausable;

/**
 * @Description: 任务接口
 *
 * @author meepai
 * @date 2016-11-21
 */
public interface ITask extends IPausable, ITaskExecutionCycle, Callable<ITaskResult>, IVisitable, Serializable {

	/**
	 * 任务名称
	 * @return
	 */
	String getName();
	
	/**
	 * 获取执行开始时间
	 * @return
	 */
	Long getStartTime();
	
	/**
	 * 设置执行开始时间
	 */
	void setStartTime(Long time);
	
	/**
	 * 获取执行结束时间
	 * @return
	 */
	Long getEndTime();
	
	/**
	 * 设置执行结束时间
	 */
	void setEndTime(Long time);
	
	/**
	 * 设置任务执行状态
	 */
	void setExecutionStatus(TaskExecutionStatus executionStatus);
	
	/**
	 * 添加任务事件监听器
	 * @param listener
	 */
	void addTaskEventListener(ITaskEventListener listener);
	
}
